package stage_1_module_4.code.homework_1;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/***
 * 使用 List 集合实现简易的学生信息管理系统，要求打印字符界面提示用户选择相应的功
 * 能，根据用户输入的选择去实现增加、删除、修改、查找以及遍历所有学生信息的功能。 基于学生信息管理系统增加以下两个功能：
 * a.自定义学号异常类和年龄异常类，并在该成员变量不合理时产生异常对象并抛出。 b.当系统退出时将 List
 * 集合中所有学生信息写入到文件中，当系统启动时读取文件中所 有学生信息到 List 集合中。
 * 
 * 其中学生的信息有：学号、姓名、年龄。 要求： 尽量将功能拆分为多个.java 文件。
 * 
 * 思路: 1.定义Student类 2.声明Student类型的list 3.依次实现增加，删除，更新，查找和打印列表的方法并根据用户输入功能项执行相关功能
 * 4.增加:读取输入的学号，姓名，年龄创建学生对象并放入list 5.查找:读取输入的学号，遍历list，如果碰到学号相同的对象，返回信息
 * 6.删除:读取输入的学号，查找是否存在学生信息，如果存在获取索引号，并删除该索引的对象
 * 7.更新:读取输入的学号，查找是否存在学生信息，如果存在获取索引号，读取输入的姓名和年龄并更新该索引的对象信息 8.退出
 */

public class Answer {
    public static void main(String[] args) {
        boolean quit = false;
        List<Student> sl = new ArrayList<>();
        // sl.add(new Student("2020001","agui",30));
        Object obj = Model.readList();
        if (obj instanceof List) {
            sl = (List<Student>) obj;
        }
        System.out.println("文本中加载的学生信息:"+sl);
        Scanner sc = new Scanner(System.in);
        while (!quit) {
            System.out.println("选择操作的功能:1-打印学生列表;2-增加学生信息;3-根据学号查询学生信息;4-根据学号删除学生信息;5-根据学号更新学生信息;0-退出系统");
            if (!sc.hasNextInt()) {
                System.out.println("菜单选择错误，bye bye~");
                quit = true;
                break;
            }
            int opt = sc.nextInt();
            switch (opt) {
                case 0:
                    // 退出系统
                    quit = true;
                    System.out.println("bye bye~");
                    Model.saveList(sl);
                    break;
                case 1:
                    // 查询列表
                    Model.showStudent(sl);
                    break;
                case 2:
                    // 增加学生信息
                    System.out.println("分别输入学号，姓名，年龄");
                    String no = sc.next();
                    String name = sc.next();
                    int age = sc.nextInt();
                    Student st;
                    try {
                        st = new Student(no, name, age);
                        Model.addStudent(sl, st);
                    } catch (NumException | NameException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    break;
                case 3:
                    //根据学号查询学生信息
                    System.out.println("请输入学号查询学生信息");
                    String no1 = sc.next();
                    System.out.println("学生信息:"+ Model.findStudentByNo(sl, no1));
                    break;
                case 4:
                    //根据学号删除学生信息
                    System.out.println("请输入学号删除学生信息");
                    String no2 = sc.next();
                    Model.removeStudentByNo(sl, no2);
                    Model.showStudent(sl);
                    break;
                case 5:
                    //根据学号更新学生信息
                    System.out.println("请输入学号更新学生信息");
                    String no3 = sc.next();
                    Student st3 = Model.findStudentByNo(sl, no3);
                    if (st3 == null) {
                        System.out.println("未查找到学生信息");
                    } else {
                        System.out.println("分别输入姓名，年龄");
                        String name1 = sc.next();
                        int age1 = sc.nextInt();
                        st3.setName(name1);
                        st3.setAge(age1);
                        Model.updateStudent(sl, st3);
                    }
                    Model.showStudent(sl);
                    break;
                default:
                    //退出系统
                    quit = true;
                    System.out.println("输入错误，bye bye~");
                    Model.saveList(sl);
                    break;
            }
        }
        sc.close();
    }
}
